#include "DataStructure.h"
#include "utils.h"
gewVec3::gewVec3(const gewVec3& rhs)
{x=rhs.x;y=rhs.y;z=rhs.z;}
gewVec3::gewVec3(gewVec3* rhs)
{x=rhs->x;y=rhs->y;z=rhs->z;}
bool gewVec3::operator ==(gewVec3& rhs)
{
	if( isEqual(x,rhs.x,EPSILON)&&
		isEqual(y,rhs.y,EPSILON)&&
		isEqual(z,rhs.z,EPSILON))
		return true;
	return false;
}
float gewVec3::getLength()
{
	return sqrtf(x*x + y*y + z*z);
}
float gewVec3::getLengthSquare()
{
	return (x*x + y*y + z*z);
}
void gewVec3::normalize()
{
	float len = getLength();
	if (isEqual(len,0., EPSILON)) 
	{
		x = y = z = 0.0;
	}
	else if (!isEqual(len, 1.0,EPSILON))
	{  
		x /= len;
		y /= len;
		z /= len;
	}
}


bool gewVec2::operator ==(gewVec2& rhs)
{
	if( isEqual(x,rhs.x,EPSILON)&&
		isEqual(y,rhs.y,EPSILON))
		return true;
	return false;
}
gewVec3 gewVec3::operator +(gewVec3& rhs)
{
	return gewVec3(x+rhs.x,y+rhs.y,z+rhs.z);
}
gewVec3 gewVec3::operator -(gewVec3& rhs)
{
	return gewVec3(x-rhs.x,y-rhs.y,z-rhs.z);
}
gewVec3 gewVec3::operator *(float f)
{
	return gewVec3(x*f,y*f,z*f);
}
gewVec3 gewVec3::operator /(float f)
{
	return gewVec3(x/f,y/f,z/f);
}
void gewVec3::operator +=(gewVec3& rhs)
{
	x+=rhs.x;
	y+=rhs.y;
	z+=rhs.z;
}
void gewVec3::operator -=(gewVec3& rhs)
{
	x-=rhs.x;
	y-=rhs.y;
	z-=rhs.z;
}
void gewVec3::operator *=(float f)
{
	x*=f;
	y*=f;
	z*=f;
}
void gewVec3::operator /=(float f)
{
	x/=f;
	y/=f;
	z/=f;
}